Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

294
Views
¿Por qué muchas funciones de C usan punteros para pasar datos en lugar de usar "retorno"?

Esta es más o menos una pregunta sobre metodología y justificación que cualquier otra cosa. Al programar varios módulos del núcleo para Linux, me confunde lo que considero una forma torpe de diseñar funciones. Por ejemplo, para recuperar el inodo de un archivo dada su ruta, tuve que usar algo como:

 struct inode *inode; struct path path; kern_path(path_name, LOOKUP_FOLLOW, &path); inode = path.dentry->d_inode;

¿Por qué no solo una función que funciona como:

 struct inode inode; struct path path = kern_path(path_name, LOOKUP_FOLLOW); inode = path.dentry->d_inode;

Parece mucho más intuitivo.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

¿Y qué harías con el int que devuelve kern_path ?

Es importante que las funciones puedan devolver algún tipo de código de error para que el usuario pueda asegurarse de que la función se realizó correctamente. Hay dos opciones obvias:

  1. Devuelve el código de error.

    Esto significa que debe tomar el otro valor que desea devolver como parámetro.

  2. Devolver el valor.

    Esto significa que debe tomar el código de error como parámetro.

Dado que solo puede devolver 1 valor en C, debe tomar algo como parámetro, ya que en última instancia desea devolver dos cosas al usuario (el código de error y el valor).

over 4 years ago · Santiago Trujillo Report

0

El kernel es un programa en C con restricciones especiales. En particular, no se permite que la pila de llamadas sea profunda (IIRC, está limitada a 4 Kbytes).

Cuando devuelves una struct , la ABI (ver la ABI x86-64 ...) ordena que (excepto por algunas struct cortas que se ajustan en dos palabras) la struct devuelta pase por la pila. Por lo tanto, dicho estilo favorecería los marcos de pila bastante grandes, por lo que cumpliría más fácilmente con el límite de pila.

Por cierto, el estilo habitual sería devolver algún código de error entero y modificar los datos señalados por los punteros de argumento.

En x86-64/Linux, devolver una estructura de dos valores escalares (enteros, punteros, enumeraciones, dobles, ...) definitivamente vale la pena, vea esto .

over 4 years ago · Santiago Trujillo Report

0

Eso tiene el beneficio de reducir la copia de bloques de memoria de un lado a otro.

El uso de esta metodología permite que la función invocada solo modifique ciertas partes de la estructura pasada y no se copia memoria en absoluto.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!